package com.hspedu.generic.cusotmgeneric;

/**
 * @author DL5O
 * @version 1.0
 */
public class CustomGeneric {
    public static void main(String[] args) {

    }
}

//解读
//1.Tiger后面有泛型，所有我们把Tiger就称为 自定义泛型类
//2.T,R,M泛型标识符，一般那都是字母大写
//3.泛型可以有多个
//4.普通成员，属性，方法都可以使用泛型
class Tiger<T,R,M>{
    String name;
    R r; //属性
    M m;
    T t;

    //因为数组在new 的时候，不能确定T的类型，就无法在内存中开空间
    T [] ts;//使用泛型的不允许直接初始化

    public Tiger(String name){
        this.name = name;
    }

    public Tiger(String name, R r, M m, T t) {
        this.name = name;
        this.r = r;
        this.m = m;
        this.t = t;
    }


    //在加载tiger类的时候，M泛型仍然不确定是怎么样的类型
    //因为是静态的和类相关的，在类加载时，对象可能还没有创建
    //所有静态方法和静态属性使用了泛型，JVM 就无法完成初始化
  /*  static R r2;
    public static void m1(M m){

    }*/

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public R getR() {//返回类型使用泛型
        return r;
    }

    public void setR(R r) {//
        this.r = r;
    }

    public M getM() {
        return m;
    }

    public void setM(M m) {
        this.m = m;
    }

    public T getT() {
        return t;
    }

    public void setT(T t) {
        this.t = t;
    }
}